
package modelo;

import java.util.Random;

public class Estudiante extends Persona implements Comparable<Estudiante>,Cloneable
{
    private float[] notas;
    private float notaFinal;
    private boolean status;

    public Estudiante()
    {
        notas= new float[3];
        notaFinal=0.0f;
        status=false;
    }

    public Estudiante(String cedula,String nombre,String apellido)
    {
        super(cedula,nombre,apellido);
        notas= new float[3];
        notaFinal=0.0f;
        status=false;
    }

    public float getNotaFinal() {
        return Math.round(notaFinal);
    }

    public void setNotaFinal(float notaFinal) {
        this.notaFinal = notaFinal;
    }

    public float[] getNotas() {
        return notas;
    }

    public void setNotas(float[] notas) {
        this.notas = notas;
    }

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    

    /*implementacion del Metodo declarado en la interfaz Validacion*/
    public boolean validar() 
    {
        boolean valido= true;
        
        if (!this.getCedula().matches("[V|v|E|e]-[1-9][0-9]{6,7}") ||
            this.getNombre().isEmpty() || this.getApellido().isEmpty() ||
              (notas!=null &&
                 (!(this.notas[0]>=0 && this.notas[0] <=20) ||
                  !(this.notas[1]>=0 && this.notas[1] <=20) ||
                  !(this.notas[2]>=0 && this.notas[2] <=20)
                 )
               )
           )
        {
            valido=false;
        }    
        
        return valido;
    }

    /*Implementacion del metodo declarado en la interfaz Comparable
      necesario para asignar un criterio de comparacion
     */
    public int compareTo(Estudiante estudiante)
    {
        int valorCedula= Integer.parseInt(this.getCedula().substring(2, this.getCedula().length())) - 
                         Integer.parseInt(estudiante.getCedula().substring(2, estudiante.getCedula().length()));
        
        return valorCedula;
    }
    
    public void presentarEvaluaciones()
    {
        Random aleatorio= new Random();
        float nota= 0.0f;

        for (int i=0; i < notas.length; ++i)
        {
            nota= aleatorio.nextFloat() * 20;
            notas[i]= (int)Math.round(nota);
        }
    }

    /*Este metodo devuelve una cadena de texto asociada con un objeto Estudiante
      - Esta sobreescribiendo el metodo toString() de Object
     */
    @Override
    public String toString()
    {
        /*System.getProperty("line.separator") devuelve el separator
          de linea asociado con el Sistema Operativo
          toUpperCase() devuelve la cadena en Mayusculas
         */
        String cadena="Cedula: " + this.getCedula().toUpperCase() + System.getProperty("line.separator") +
                      "Nombre: " + this.getNombre() + System.getProperty("line.separator") +
                      "Apellido: " + this.getApellido() + System.getProperty("line.separator") +
                      "Nota Final: " + this.getNotaFinal() + System.getProperty("line.separator");
        return cadena;    
    }

    @Override
    public Object clone() throws CloneNotSupportedException
    {
        return super.clone();
    }

}
